unit dmcadastro;

{$mode objfpc}

interface

uses
  Classes, SysUtils, DB, FileUtil, LResources, Forms, Controls, Dialogs,
  ZConnection, ZDataset, ZSqlUpdate, ZSequence, dmprincipal, ucondicoesconsulta;

type
  TDadosProdutor = record
    id_produtor: integer;
    nome_produtor: string;
    telefone: string;
    email: string;
    endereco: string;
    bairro: string;
    cep: string;
    id_municipio: integer;
  end;

  TDadosMunicipio = record
    id_municipio: integer;
    nome_municipio: string;
    uf: string;
  end;
  { TDataCadastro }

  { TDataCadastro }

  TDataCadastro = class(TDataModule)
    DatasourceMunicipio: TDatasource;
    DatasourceProdutor: TDatasource;
    ZQueryMunicipio: TZQuery;
    ZQueryMunicipioid_municipio: TLongintField;
    ZQueryMunicipionome_municipio: TStringField;
    ZQueryMunicipiouf: TStringField;
    ZQueryProdutor: TZQuery;
    ZQueryProdutorbairro: TStringField;
    ZQueryProdutorcep: TStringField;
    ZQueryProdutoremail: TStringField;
    ZQueryProdutorendereco: TStringField;
    ZQueryProdutorid_municipio: TLongintField;
    ZQueryProdutorid_produtor: TLongintField;
    ZQueryProdutornome_municipio: TStringField;
    ZQueryProdutornome_produtor: TStringField;
    ZQueryProdutortelefone: TStringField;
    ZQueryProdutoruf: TStringField;
    ZSeqProdutor: TZSequence;
    ZSeqMunicipio: TZSequence;
    ZUpdateMunicipio: TZUpdateSQL;
    ZUpdateProdutor: TZUpdateSQL;
    function ProdutorBusca(): TDadosProdutor;
    procedure ProdutorCadastro();
    function MunicipioBusca(): TDadosMunicipio;
    procedure MunicipioCadastro();
    function MunicipioBusca(id_municipio: integer): TDadosMunicipio;
    procedure ZQueryProdutorid_municipioChange(Sender: TField);
    procedure MunicipioInserir();
    procedure MunicipioExcluir();
    procedure MunicipioEditar();
    procedure MunicipioSalvar();
    procedure MunicipioCancelar();
    procedure ProdutorInserir();
    procedure ProdutorExcluir();
    procedure ProdutorEditar();
    procedure ProdutorSalvar();
    procedure ProdutorCancelar();
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  DataCadastro: TDataCadastro;

implementation

uses
  fprodutorbusca, fprodutorcadastro, fmunicipiobusca, fmunicipiocadastro;

{ TDataCadastro }

function TDataCadastro.ProdutorBusca(): TDadosProdutor;
var
  Produtor: TDadosProdutor;
begin
  Produtor.id_produtor := -1;
  FormProdutorBusca.ShowModal;
  if (not ZqueryProdutor.IsEmpty) then
  begin
    Produtor.id_produtor := ZqueryProdutor.FieldByName('id_produtor').AsInteger;
    Produtor.nome_produtor := ZqueryProdutor.FieldByName('nome_produtor').AsString;
    Produtor.email := ZqueryProdutor.FieldByName('email').AsString;
    Produtor.telefone := ZqueryProdutor.FieldByName('telefone').AsString;
    Produtor.bairro := ZqueryProdutor.FieldByName('bairro').AsString;
    Produtor.endereco := ZqueryProdutor.FieldByName('endereco').AsString;
    Produtor.cep := ZqueryProdutor.FieldByName('cep').AsString;
    Produtor.id_municipio := ZqueryProdutor.FieldByName('id_municipio').AsInteger;
  end;
  Result := Produtor;
end;

procedure TDataCadastro.ProdutorCadastro();
begin
  DataPrincipal.ConsultaVazio(ZqueryProdutor, 'produtor');
  FormProdutorCadastro.ShowModal();
end;

function TDataCadastro.MunicipioBusca(): TDadosMunicipio;
var
  Municipio: TDadosMunicipio;
begin
  Municipio.id_Municipio := -1;
  FormMunicipioBusca.ShowModal;
  if (not ZqueryMunicipio.IsEmpty) then
  begin
    Municipio.id_Municipio := ZqueryMunicipio.FieldByName('id_Municipio').AsInteger;
    Municipio.nome_Municipio := ZqueryMunicipio.FieldByName('nome_Municipio').AsString;
    Municipio.uf := ZqueryMunicipio.FieldByName('uf').AsString;
  end;
  Result := Municipio;
end;

procedure TDataCadastro.MunicipioCadastro();
begin
  DataPrincipal.ConsultaVazio(ZQueryMunicipio, 'municipio');
  FormMunicipioCadastro.ShowModal();
end;

function TDataCadastro.MunicipioBusca(id_municipio: integer): TDadosMunicipio;
var
  Condicoes: TCondicoesConsulta;
  Municipio: TDadosMunicipio;
begin
  Municipio.id_Municipio := -1;
  Condicoes := TCondicoesConsulta.Create(CON_AND);
  Condicoes.Add('id_municipio', IntToStr(id_municipio));
  DataPrincipal.ConsultaCondicoes(ZQueryMunicipio, 'municipio', Condicoes);
  if (not ZqueryMunicipio.IsEmpty) then
  begin
    Municipio.id_Municipio := ZqueryMunicipio.FieldByName('id_Municipio').AsInteger;
    Municipio.nome_Municipio := ZqueryMunicipio.FieldByName('nome_Municipio').AsString;
    Municipio.uf := ZqueryMunicipio.FieldByName('uf').AsString;
  end;
  ShowMessage(condicoes.GetCondicoes());
  Result := Municipio;
end;

procedure TDataCadastro.ZQueryProdutorid_municipioChange(Sender: TField);
var
  Municipio: TDadosMunicipio;
begin
  Municipio.id_municipio := ZqueryProdutor.FieldByName('id_municipio').AsInteger;
  Municipio := MunicipioBusca(Municipio.id_municipio);
  if (Municipio.id_municipio = -1) then
  begin
    ZqueryProdutor.FieldByName('nome_municipio').Value := Municipio.nome_municipio;
    ZqueryProdutor.FieldByName('uf').Value := Municipio.uf;
  end;
end;

procedure TDataCadastro.MunicipioInserir();
begin
  ZQueryMunicipio.Insert();
end;

procedure TDataCadastro.MunicipioExcluir();
begin
  ZQueryMunicipio.Delete();
end;

procedure TDataCadastro.MunicipioEditar();
begin
  ZQueryMunicipio.Edit();
end;

procedure TDataCadastro.MunicipioSalvar();
begin
  ZQueryMunicipio.Post();
end;

procedure TDataCadastro.MunicipioCancelar();
begin
  ZQueryMunicipio.Cancel();
end;

procedure TDataCadastro.ProdutorInserir();
begin
  ZQueryProdutor.Insert();
end;

procedure TDataCadastro.ProdutorExcluir();
begin
  ZQueryProdutor.Delete();
end;

procedure TDataCadastro.ProdutorEditar();
begin
  ZQueryProdutor.Edit();
end;

procedure TDataCadastro.ProdutorSalvar();
begin
  ZQueryProdutor.Post();
end;

procedure TDataCadastro.ProdutorCancelar();
begin
  ZQueryProdutor.Cancel();
end;

initialization
  {$I dmcadastro.lrs}

end.
